package com.feituan.core.util;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.atomic.AtomicInteger;

public class OrderNumberGenerator {

    // 日期时间格式化器，格式为：年（4位）月（2位）日（2位）时（2位）分（2位）秒（2位）
    private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyyMMddHHmmssSSS");

    // 上一次生成的时间戳，用于防止同一毫秒内生成相同的订单号
    private static long  lastTimestamp = -1L;

    // 同步方法以确保线程安全
    public synchronized static String generateOrderNumber() {
        long currentTimeMillis = System.currentTimeMillis();
        // 如果当前时间和上一次生成订单号的时间相同，则等待1毫秒
        while (currentTimeMillis == lastTimestamp) {
            try {
                Thread.sleep(1);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            currentTimeMillis = System.currentTimeMillis();
        }

        lastTimestamp = currentTimeMillis;
        // 获取当前时间戳并格式化
        String timestamp = DATE_FORMAT.format(new Date(currentTimeMillis));

        return timestamp;
    }
}
